package controller

import (
	"bluebell-backend/common"
	"bluebell-backend/model/po"
	"bluebell-backend/model/vo"
	"bluebell-backend/service"
	"fmt"
	"github.com/gin-gonic/gin"
)

func Register(c *gin.Context) {
	// 拿参数
	userRegisterVo := new(vo.Register)
	if err := c.ShouldBindJSON(userRegisterVo); err != nil {
		fmt.Println("参数解析失败")
		return
	}
	// TODO 参数校验

	// 封装逻辑
	code, err := service.Register(userRegisterVo.Email, userRegisterVo.Password)
	if err != nil {

		common.ErrorWithMsg(c, code, err.Error())
		return
	}

	common.OK(c, code, nil)
	return

}

func Login(c *gin.Context) {
	// 参数绑定
	userLoginVo := new(vo.Login)
	if err := c.ShouldBindJSON(userLoginVo); err != nil {
		fmt.Println("参数解析失败")
	}
	// TODO 参数校验
	// 登录逻辑
	code, token, err := service.Login(userLoginVo.Email, userLoginVo.Password)
	if err != nil {
		fmt.Println("登录失败")

		common.ErrorWithMsg(c, code, err.Error())
		return
	}
	common.OK(c, code, token)
	return
}

func GetUserInfo(c *gin.Context) {
	id, ok := c.Get(common.CtxUserIDKey)
	if !ok {
		fmt.Println("没有信息")
		common.Error(c, common.CodeNeedLogin)
		return
	}
	uuid := id.(int64)
	code, err, user := service.GetUserInfo(uuid)
	if err != nil {
		fmt.Println("没有此用户")
		common.ErrorWithMsg(c, code, err.Error())
		return
	}
	common.OK(c, code, user)
	return
}

func UpdateUserInfo(c *gin.Context) {
	id, ok := c.Get(common.CtxUserIDKey)
	if !ok {
		fmt.Println("没有信息")
		common.Error(c, common.CodeNeedLogin)
		return
	}
	uuid := id.(int64)
	user := new(po.User)
	if err := c.ShouldBindJSON(user); err != nil {
		common.Error(c, common.ERROR)
		return
	}

	code, err := service.UpdateUserInfo(user, uuid)
	if err != nil {
		common.Error(c, common.ERROR)
		return
	}
	common.OK(c, code, nil)
	return
}
